iT邦幫忙

2026 iThome 鐵人賽

DAY 6
0

大家好!昨天介紹了何謂物件型別,還有對物件(object)的基本介紹。今天我們要來聊聊TypeScript(TS)中非常常用到的兩種資料結構:陣列與元組。

如果是以前學過 JavaScript的人,我相信你們對陣列一定不陌生。但在TypeScript裡,TS又將陣列細分為陣列與元組,而兩者間又有甚麼區別呢?


1. 陣列(Array)

陣列:指一長度不固定、內部元素都是同類型的資料清單。陣列常有的宣告寫法有兩種:

//第一種是最常見的陣列寫法:
let studentName: string[] = ["Amy", "Ruby", "Kevin"];
let passwords: number[] = [123, 456, 789];

//第二種則是陣列泛型(Array<型別>)的寫法:
let subjects: Array<string> = ["國文", "英文", "數學"];
  • 前面說到陣列內都是相同型別的元素,如果在一個字串陣列裡塞了一個數字,TS會照樣報錯喔!

2. 元組(Tuple)

來到今天的大重點:元組(Tuple),一個在JS沒有,只在TS擁有的特別概念。
元組:長度和元素的位置是固定的,但內部元素的型別不一定相同。下面來示範元組的使用方法:

//一開始先定義元組的型別
let studentScores: [string, number]; 
//正確寫法:順序及型別要符合元組先前的規範
studentScores = ["Henry", 94];

//錯誤寫法:
studentScores = [94, "Henry"]; //順序寫反會讓TS報錯
studentScores = ["Henry"]; //元組長度固定,若是少寫或多寫一個,TS也會報錯
  • 為什麼TS會新增元組的概念?

    • 元組適合讓彼此關聯、擁有固定結構的資料放在一起,解決了陣列在表達固定長度多種型別混合資料時,缺乏嚴格約束的問題。
  • 元組的小例外?

    • 在TS中,如果執行元組的.push()操作,元組還是會增加它的長度,如果要阻止元組的長度增加,就得使用唯讀元組。

3. 唯讀陣列

當我們在寫 React 狀態、Redux,或是開發共用庫時,常需要保證陣列宣告後就不能被意外修改。下面舉例常見寫法:

let roList: readonly number[] = [35, 38, 39]; 
// 或是寫成 ReadonlyArray<number>的形式

//錯誤寫法:
roList.push(4); // 唯讀型別無法更改陣列,TS會因此報錯
roList = 99; // 唯讀陣列也無法重新賦值,TS會報錯

小結

今天介紹了陣列及元組的不同,以及特別的唯讀陣列,這邊整理成表格供大家參考喔!明天來介紹聯合型別和交叉型別,大家明天見囉!

陣列(Array) 元組(Tuple)
長度 長度不固定 長度固定
資料型別 同種資料類型 可以有不同型別
應用 儲存大量同類型的資料 儲存結構固定、有特定對應關係的資料

上一篇
[Day-5]物件型別(object types)x物件(object)
下一篇
[Day-7]聯合型別&交叉型別
系列文
從零開始學習TypeScript:菜鳥的入門介紹與概覽22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言